/**
 * 微信登录工具函数
 */

/**
 * 获取微信登录Code
 * @returns {Promise<string>} 微信登录凭证
 */
function getLoginCode() {
  return new Promise((resolve, reject) => {
    wx.login({
      success: (res) => {
        if (res.code) {
          resolve(res.code);
        } else {
          reject(new Error('获取微信登录凭证失败'));
        }
      },
      fail: (err) => {
        reject(new Error('微信登录失败: ' + err.errMsg));
      }
    });
  });
}

/**
 * 获取微信用户加密数据（用于获取手机号等敏感信息）
 * @returns {Promise<Object>} 包含encryptedData和iv的对象
 */
function getEncryptedData() {
  return new Promise((resolve, reject) => {
    wx.getUserInfo({
      withCredentials: true,
      success: (res) => {
        resolve({
          encryptedData: res.encryptedData,
          iv: res.iv
        });
      },
      fail: (err) => {
        // 如果用户拒绝授权，我们仍然可以使用code登录
        resolve(null);
      }
    });
  });
}

/**
 * 完整的微信登录流程
 * 先获取code，再尝试获取加密数据
 * @returns {Promise<Object>} 登录参数对象
 */
function wxLoginFlow() {
  return new Promise(async (resolve, reject) => {
    try {
      // 获取登录code
      const code = await getLoginCode();
      
      // 尝试获取加密数据
      let encryptedInfo = null;
      try {
        encryptedInfo = await getEncryptedData();
      } catch (error) {
        console.log('获取加密数据失败，使用简单登录', error);
      }
      
      // 返回登录所需信息
      if (encryptedInfo) {
        resolve({
          code,
          encryptedData: encryptedInfo.encryptedData,
          iv: encryptedInfo.iv
        });
      } else {
        resolve({ code });
      }
    } catch (error) {
      reject(error);
    }
  });
}

module.exports = {
  getLoginCode,
  getEncryptedData,
  wxLoginFlow
}; 